PHP Conference Japan 2021
あるある
対策
staging環境を作れ
SQL単体で計測しろ
本番環境で実行するとプロセスが残る場合がある
phpMyAdminはkillされない
ピーク時間帯にスロークエリになる
対策
検索対象が増えてフルスキャンのほうが効率的とoptimizerが判定する
対策
絞り込み条件を追加しろ
n:nのテーブルへのクエリ
テーブルごとにレコード数が全然違ったりしてい一部が遅くなる
対策
影響範囲を絞るために別テーブルにする
ポリモーフィック関連テーブルはアンチパターン
フレームワークのsqllogをくたcて1つづつ実測・EXPLAIN
頻度の高い(効果的な)クエリから対応する
分析・改善手法
インデックスのつかわれ方を見る
足りているか
検索しきれているか
対象が多すぎないか
インデックスの管理
削除
本番で確認する
アクセス状況が違う
master/replicaの前代で確認する
replicaしかつかわれてない場合がある
SELECTはreplicaだけにしている可能性がある
スロークエリ予防
レビュー
SQLから要件まで
基本
正規化できないか
カラム追加ではなく役割が違うのでは
テーブル分割
論理削除
status?別テーブル?
レコード増加傾向
RDBに必要?
ログ(分析向けDB)?履歴本当に使う?
古いレコードはアーカイブできない?
ペアプロ
一緒に探す
わからないことをごまかさない
根本解決
要件と実装の間
PjM, PdMへの相談
PjM 説明、要件、ユーザー価値、リソース不足の理由、リスケ可能化、機能の重要度
PdM 品質影響、要件と実装、価値確認、リソース認識合わせ、品質確保体制
MySQLとインデックスとPHPer